During a system requirements or software architectural design phases of a computer software project, common elements or modules may be identified and assigned to individual software developers. Anticipating commonalities at a high level and early in development renders a project more modular and easier to maintain. This reduces human error and other related costs and increases the reliability of the resulting code.
However, not all commonalities are easy to discern before coding begins. As each project grows and gains complexity over time, its source code or other files may reveal patterns that repeat throughout the project code base. Source code, whether it is C++, Java, Perl, HTML or XML files, may include portions that repeat in many places with little or no alteration.
These repetitive portions of code can be technology or domain oriented, well-known or emerging, affecting code or other project artifacts. In most cases, maintaining such files by hand makes little sense, since human error may result in lost reliability of the resulting code.